import globals from 'globals'; // 引入浏览器环境的全局变量定义
import js from '@eslint/js'; // 引入 ESLint 官方的 JS 配置
import tsEslint from '@typescript-eslint/eslint-plugin'; // 引入 TypeScript ESLint 插件
import tsParser from '@typescript-eslint/parser'; // 引入 TypeScript 解析器
import vuePlugin from 'eslint-plugin-vue'; // 引入 Vue 插件

export default [
    {
        // 引入推荐的语法校验规则
        extends: [
            'eslint:recommended',
            'plugin:vue/vue3-recommended',
            'plugin:@typescript-eslint/recommended',
            'plugin:prettier/recommended'
        ],
        // 配置 ESLint 应该检查的文件类型
        files: ['*.vue', '*.ts', '*.js'],
        languageOptions: {
            // 定义全局变量，支持浏览器环境
            globals: globals.browser,
            // 配置 ESLint 使用的解析器
            parser: 'vue-eslint-parser',
            parserOptions: {
                // 使用最新的 ECMAScript 版本
                ecmaVersion: 'latest',
                // 使用 ES 模块化规范
                sourceType: 'module',
                // 配置 TypeScript 解析器以解析 <script> 标签中的 TS 代码
                parser: tsParser
            }
        },
        plugins: {
            // 注册 Vue 插件
            vue: vuePlugin,
            // 注册 TypeScript ESLint 插件
            '@typescript-eslint': tsEslint
        },
        rules: {
            // 自定义规则配置
            indent: ['error', 4, { SwitchCase: 1 }], // 设置缩进为 4 空格，switch 语句中的 case 语句缩进为 1 层
            '@typescript-eslint/no-unused-vars': 'off', // 关闭 TS 未使用变量的检查
            'vue/multi-word-component-names': [
                'error',
                {
                    ignores: ['index', 'Header'] // 忽略单词组件名为 'index' 和 'Header' 的规则检查
                }
            ],
            '@typescript-eslint/no-var-requires': 'off', // 关闭 TS 的 no-var-requires 检查
            '@typescript-eslint/no-explicit-any': 'off', // 关闭 TS 的 no-explicit-any 检查
            semi: 'off', // 关闭分号检查
            '@typescript-eslint/no-this-alias': 'off', // 关闭 TS 的 no-this-alias 检查
            'no-debugger': 'off', // 关闭 debugger 检查
            'vue/no-unused-vars': 'off', // 关闭 Vue 未使用变量的检查
            'vue/no-template-shadow': 'off', // 关闭 Vue template shadow 变量检查
            'vue/require-v-for-key': 'off', // 关闭 Vue v-for 必须有 key 的检查
            'vue/no-textarea-mustache': 'off', // 关闭 Vue textarea 中不允许使用 Mustache 的检查
            'vue/no-v-html': 'off' // 关闭 Vue v-html 的检查
        }
    },
    // 引入 ESLint 官方推荐配置
    js.configs.recommended,
    // 引入 TypeScript ESLint 推荐配置
    tsEslint.configs.recommended,
    // 引入 Vue 的 essential 配置
    vuePlugin.configs['flat/essential']
];
